// noinspection ES6PreferShortImport

import type { PluginOption } from 'vite'
import terser from '@rollup/plugin-terser'
import { visualizer } from 'rollup-plugin-visualizer'
import monkey from 'vite-plugin-monkey'
import { BUILD_CONFIG } from '../../src/types/constants/build'
import {
  getAllConnects,
  getAllRequires,
  getAllResources,
} from '../../src/types/interfaces/resource'
import { Logger } from '../utils/logger'
import { APP_BUILD_TIME_CONFIG } from './shared'

export function viteConfigurePlugins(isProduction: boolean): PluginOption[] {
  Logger.info('加载插件配置', 'PluginConfig')

  const plugins: PluginOption[] = [
    monkey({
      entry: 'src/main.ts',
      userscript: {
        'name': BUILD_CONFIG.NAME,
        'namespace': BUILD_CONFIG.URL.REPO_URL,
        'copyright': `Copyright © ${APP_BUILD_TIME_CONFIG.createYear}-${APP_BUILD_TIME_CONFIG.currentYear} [${BUILD_CONFIG.AUTHOR}]. All rights reserved.`,
        'version': BUILD_CONFIG.VERSION,
        'source': `创建于 ${BUILD_CONFIG.CREATE_TIME} | 更新于 ${APP_BUILD_TIME_CONFIG.currentDate}`,
        'license': BUILD_CONFIG.LICENSE,
        'description': BUILD_CONFIG.DESCRIPTION,
        'author': BUILD_CONFIG.AUTHOR,
        'icon64': BUILD_CONFIG.IMAGE.LOGO_URL,
        'antifeature': [
          { type: 'ads', description: '本脚本不含任何广告或推广内容' },
          { type: 'tracking', description: '本脚本不会收集或追踪任何用户数据' },
          { type: 'miner', description: '本脚本不使用用户设备进行加密货币挖矿' },
        ],
        'run-at': 'document-start',
        'match': [
          // ============================ 博客类 ============================
          // CSDN
          '*://blog.csdn.net/*/article/details/*',
          '*://*.blog.csdn.net/article/details/*',
          // 掘金
          '*://juejin.cn/post/*',
          // 知乎问答
          '*://zhuanlan.zhihu.com/p/*',
          // 知乎
          '*://www.zhihu.com/question/*',
          // 简书
          '*://www.jianshu.com/p/*',
          // 51 博客
          '*://blog.51cto.com/*',
          // ============================ 搜索类 ============================
          // 百度搜索
          '*://www.baidu.com/*',
          // 谷歌搜索
          '*://www.google.com/*',
          '*://www.google.com.hk/*',
          // 必应搜索
          '*://www.bing.com/*',
          '*://cn.bing.com/*',
          // 搜狗搜索
          '*://www.sogou.com/*',
          '*://weixin.sogou.com/*',
          '*://v.sogou.com/*',
          '*://zhishi.sogou.com/*',
          '*://mingyi.sogou.com/*',
          // 360 搜索
          '*://www.so.com/*',
          '*://www.n.cn/*',
          '*://tv.360kan.com/*',
          '*://news.so.com/*',
          '*://wenku.so.com/*',
          '*://baike.so.com/*',
          // ============================ 视频类 ============================
          // 哔哩哔哩
          '*://www.bilibili.com/video/*',
          '*://www.bilibili.com',
          // ============================ 其他类 ============================
          // 油叉
          '*://greasyfork.org/*',
          // 阿里图标
          '*://www.iconfont.cn/*',
          // 彼岸图库
          '*://pic.netbian.com/*',
          // 码云
          '*://gitee.com/*/*',
          // Github
          '*://github.com/*/*',
        ],
        'exclude': [
          // ============================ 博客类 ============================
          // 知乎问答
          '*://www.zhihu.com/question/*/log',
        ],
        'tag': ['utilities', 'productivity'],
        'require': getAllRequires(),
        'resource': getAllResources(),
        'connect': getAllConnects(),
        'noframes': true, // 禁用脚本运行在 iframes 中
        'downloadURL': BUILD_CONFIG.URL.DOWNLOAD_URL,
        'updateURL': BUILD_CONFIG.URL.UPDATE_URL,
        'supportURL': BUILD_CONFIG.URL.FEED_BACK_URL,
      },
      build: {
        fileName: BUILD_CONFIG.MAIN_SCRIPT_FILENAME, // 输出文件
        metaFileName: BUILD_CONFIG.META_SCRIPT_FILENAME, // 生成 meta 文件
        externalGlobals: { // 外部依赖配置
        },
        autoGrant: true, // 【重要】自动添加 grant 权限，就不需要在使用 userscript.grant 来添加
      },
      // server: {
      //   open: false, // 可选：自动打开浏览器,
      // },
    }),
    visualizer({
      filename: 'dist/stats.html', // 生成可视化报告
      title: '项目构建分析报告',
      template: 'treemap', // 可选: sunburst, treemap, network, raw-data
      gzipSize: true,
      brotliSize: true,
    }),
  ]

  if (isProduction) {
    plugins.push(terser({ // 打包处理（https://terser.org/docs/api-reference/#compress-options）
      compress: {
        // drop_console: ["], // 去掉 console 相关的代码,如: 填写 log 等关键字，会去掉所有包含该关键字的代码
        drop_debugger: true, // 去掉自动断点
        pure_funcs: ['console.info'], // 无副作用时，直接移除
        passes: 2, // 增加压缩次数提高压缩率
        dead_code: true, // 移除死代码
        unused: true, // 移除未使用的变量和函数
        join_vars: true, // 合并变量声明
        collapse_vars: true, // 折叠变量
        reduce_vars: true, // 减少变量使用
      },
      format: {
        comments: false, // 不保留任何注释
        indent_level: 0, // 无缩进
        semicolons: true, // 保留分号（某些情况下更安全）
        quote_style: 1, // 使用单引号
      },
      // 启用多进程压缩
      maxWorkers: 4,
      // 启用 sourcemap（开发环境）
      sourceMap: !isProduction,
    }))
  }

  return plugins
}
